package com.hackafone.tale.service.rest.impl;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

import com.google.gson.Gson;
import com.hackafone.tale.service.dao.TailDao;
import com.hackafone.tale.service.dao.TaleDao;
import com.hackafone.tale.service.model.Tail;
import com.hackafone.tale.service.model.Tale;

@Path("/tales/")
public class TaleResource
{

	@GET
	@Produces({ "application/json" })
	@Path("{taleId}")
	public Tale getTale(@PathParam("taleId") long taleId)
	{
		
		return TaleDao.INSTANCE.getTaleById(taleId);
		
//		Tale tale = new Tale();
//		
//		tale.setMaxInteractions(10);
//		tale.setMaxDays(5);
//		
//		Date date = new Date();
//		tale.setCutOffDate(date.getTime());
//		tale.setMaxChars(200);
//		tale.setLanguage("PT_pt");
//		tale.setTitle("A Tale Title");
//		tale.setStartTimestamp(date.getTime());
//		tale.setCurrentInteractions(50);
//		tale.setLastLat(41.150118);
//		tale.setLastLon(-8.610253);
//		tale.setLastCity("Porto");
//		tale.setLastCity("Portugal");
//		
//		return tale;
	}

	
	@GET
	@Produces({ "application/json" })
	public List<Tale> getTale()
	{
		return TaleDao.INSTANCE.listTales();
	}
		
	@POST
	@Produces(MediaType.TEXT_PLAIN)
	@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	public String newTale(
			@FormParam("json") String json,
			@Context HttpServletResponse servletResponse
			) throws IOException
	{
		Gson gson = new Gson();
		
		Tale tale = gson.fromJson(json, Tale.class);
		TaleDao.INSTANCE.add(tale);
		
		return Long.toString(tale.getId());
	}
	
	
	@GET
	@Produces({ "application/json" })
	@Path("getTails/{taleId}")
	public List<Tail> getTailsInTale(@PathParam("taleId") long taleId)
	{
		
		return TailDao.INSTANCE.listTails(taleId);
	}

}
